"""
class A:
    def f(self,n):
        print(self,n)
        print("我是self的方法")
a = A()
a1 = A()
print(a)
print("=============")

# 是那个对象调用的self参数的方法,那么传入的self就是那个对象
a.f(1) # <__main__.A object at 0x01B8EE70>   1

# 类调用必须传入对象 不会自动传入对象 自己手动传入对象
A.f(a,1)
"""

# 绑定类的方法是给类用的
"""
class B:
    @classmethod # 类方法
    def f(cls,n): # cls == self
        # 因为使用了classmethod装饰器，所以无需实例对象，直接通过类就可以调用
        print(cls,n)
        print("我是绑定的方法")
B.f(5) # <class '__main__.B'> 5

class B1:
    def f(cls,n): #没有加classmethod，就表示不是类可以直接调用的
        # 你需要先实例化对象，然后通过对象调用
        print(cls,n)
        print("我是绑定的方法（但是没加classmethod装饰器）")
a1 = B1()
B1.f(a1,5) # <__main__.B1 object at 0x01D7E770> 5
"""

# 静态方法
class C:
    @staticmethod # 使用了staticmethod的方法，你就把他当成普通的函数
    def f(n):
        print(n)
        print("我是非绑定方法/静态方法")

C.f(5)
c1 = C()
c1.f(5)

